#include<bits/stdc++.h>
#define rep(i,l,r) for(int i=(l),i##end=(r);i<=i##end;++i)
#define per(i,r,l) for(int i=(r),i##end=(l);i>=i##end;--i)
//#define int long long
//#define double long double
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define rbtree(way) tree<way,null_type,less<way>,rb_tree_tag,tree_order_statistics_node_update>
using namespace std;
const int maxn=200+10,maxm=1e6+10,mod=998244353,inf=1e9;
inline int ksm(int x,int k,int mod=mod){
	int ans=1;
	for(;k;k>>=1,x=x*x%mod) if(k&1) ans=ans*x%mod;
	return ans;
}

void Inspect(int R);
void Answer(int D, int A);
void Move(int I, int V);
int NumberOfRoads();
int LastRoad();
int Color();

int n=1,f[maxn][maxn],ans[maxn];
vector<int> e[maxn];

int dfs(){
	int nw=Color();
	cerr<<nw<<"]";
	if(nw!=1) return Move(LastRoad(),nw),nw;
	nw=++n;
	rep(i,1,NumberOfRoads()) Move(i,nw),e[nw].pb(dfs());
	return Move(LastRoad(),nw),nw;
}

void Inspect(int R) {
	dfs();
	cerr<<"b";
	rep(i,1,n-1) rep(j,1,n-1) f[i][j]=i==j?0:inf;
	rep(i,2,n) for(int x:e[i]) f[i-1][x-1]=1;
	rep(k,1,n-1) rep(i,1,n-1) rep(j,1,n-1) f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
	rep(i,1,n-1) rep(j,1,n-1) ++ans[f[i][j]];
	rep(i,1,R) Answer(i,ans[i]);
}
